iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Software Development

30天快速打造Python資料結構&演算法邏輯刷爆LeetCode系列 第 29

DAY 29 「組合(Combinations)Leetcode」必考的Python程式碼撰寫~

  • 分享至 

  • xImage
  •  
  • 組合問題:
    組合(Combinations) - 題號:77
    題目描述:給定兩個整數 n 和 k,返回 1 ... n 中所有可能的 k 個數的組合。
def combine(n, k):
    def backtrack(start, path):
        if len(path) == k:
            result.append(path[:])
            return
        for i in range(start, n + 1):
            path.append(i)
            backtrack(i + 1, path)
            path.pop()
    result = []
    backtrack(1, [])
    return result
  • 組合總和 III - 題號:216
    題目描述:找出所有相加之和為 n 的 k 個數的組合。
def combinationSum3(k, n):
    def backtrack(start, target, path):
        if target == 0 and len(path) == k:
            result.append(path[:])
            return
        if target < 0 or len(path) >= k:
            return
        for i in range(start, 10):
            path.append(i)
            backtrack(i + 1, target - i, path)
            path.pop()
    result = []
    backtrack(1, n, [])
    return result
  • 電話號碼的字母組合(Letter Combinations of a Phone Number) - 題號:17
    題目描述:給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。
def letterCombinations(digits):
    if not digits:
        return []
    phone_map = {
        '2': 'abc',
        '3': 'def',
        '4': 'ghi',
        '5': 'jkl',
        '6': 'mno',
        '7': 'pqrs',
        '8': 'tuv',
        '9': 'wxyz'
    }
    def backtrack(index, path):
        if index == len(digits):
            result.append(''.join(path))
            return
        for char in phone_map[digits[index]]:
            path.append(char)
            backtrack(index + 1, path)
            path.pop()
    result = []
    backtrack(0, [])
    return result
  • 組合總和(Combination Sum) - 題號:39
    題目描述:給定一個無重覆元素的數組 candidates 和一個目標數 target,找出 candidates 中所有可以使數字和為 target 的組合。
def combinationSum(candidates, target):
    def backtrack(start, target, path):
        if target == 0:
            result.append(path[:])
            return
        if target < 0:
            return
        for i in range(start, len(candidates)):
            path.append(candidates[i])
            backtrack(i, target - candidates[i], path)
            path.pop()
    result = []
    backtrack(0, target, [])
    return result

上一篇
DAY 28 「棧(Stacks)Leetcode」必考的Python程式碼撰寫~
下一篇
DAY 30 「單調隊列(Monotonic queue)Leetcode」進入面試的Python程式碼撰寫~
系列文
30天快速打造Python資料結構&演算法邏輯刷爆LeetCode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言